////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  camxistatsparser.h
///
/// @brief Stats parser Interface
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef CAMXISTATSPARSER_H
#define CAMXISTATSPARSER_H

#include "chistatsparser.h"

#include "camxmem.h"

CAMX_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Representation of a stats parser
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class IStatsParser
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ParseBFStats
    ///
    /// @brief  To get the BF Stats from the buffer.
    ///
    /// @param  pBuffer      Pointer to the buffer.
    /// @param  pBFConfig    Pointer to the configuration of the AF Stats.
    /// @param  ppStats      Pointer to the stats buffer.
    ///
    /// @return CDKResultSuccess if successful.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual CDKResult ParseBFStats(
        VOID*                          pBuffer,
        const BFStatsROIConfigType*    pBFConfig,
        ParsedBFStatsOutput**          ppStats) = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ParseHDRBEStats
    ///
    /// @brief  To get the HDRBE Stats from the buffer.
    ///
    /// @param  pBuffer         Pointer to the buffer.
    /// @param  pHDRBEConfig    Pointer to the configuration of the BE Stats.
    /// @param  ppStats         Pointer to the stats buffer.
    ///
    /// @return CDKResultSuccess if successful.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual CDKResult ParseHDRBEStats(
        VOID*                       pBuffer,
        const BGBEConfig*           pHDRBEConfig,
        ParsedHDRBEStatsOutput**    ppStats) = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ParseAWBBGStats
    ///
    /// @brief  To get the AWBBG Stats from the buffer.
    ///
    /// @param  pBuffer         Pointer to the buffer.
    /// @param  pAWBBGConfig    Pointer to the configuration of the AWBBG Stats.
    /// @param  ppStats         Pointer to the stats buffer.
    ///
    /// @return CDKResultSuccess if successful.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual CDKResult ParseAWBBGStats(
        VOID*                       pBuffer,
        const BGBEConfig*           pAWBBGConfig,
        ParsedAWBBGStatsOutput**    ppStats) = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ParseTintlessBGStats
    ///
    /// @brief  To get the TintlessBG Stats from the buffer.
    ///
    /// @param  pBuffer           Pointer to the buffer.
    /// @param  pTintlessBGConfig Pointer to the configuration of the TintlessBG Stats.
    /// @param  ppStats           Pointer to the stats buffer.
    ///
    /// @return CDKResultSuccess if successful.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual CDKResult ParseTintlessBGStats(
        VOID*                            pBuffer,
        const BGBEConfig*                pTintlessBGConfig,
        ParsedTintlessBGStatsOutput**    ppStats) = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ParseCSStats
    ///
    /// @brief  To get the CS Stats from the buffer.
    ///
    /// @param  pBuffer      Pointer to the buffer.
    /// @param  pCSConfig    Pointer to the configuration of the CS Stats.
    /// @param  ppStats      Pointer to the stats buffer.
    ///
    /// @return CDKResultSuccess if successful.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual CDKResult ParseCSStats(
        VOID*                      pBuffer,
        const ISPCSStatsConfig*    pCSConfig,
        ParsedCSStatsOutput**      ppStats) = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ParseRSStats
    ///
    /// @brief  To get the RS Stats from the buffer.
    ///
    /// @param  pBuffer      Pointer to the buffer.
    /// @param  pRSConfig    Pointer to the configuration of the RS Stats.
    /// @param  ppStats      Pointer to the stats buffer.
    ///
    /// @return CDKResultSuccess if successful.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual CDKResult ParseRSStats(
        VOID*                      pBuffer,
        const ISPRSStatsConfig*    pRSConfig,
        ParsedRSStatsOutput**      ppStats) = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ParseIHistStats
    ///
    /// @brief  To get the IHist Stats from the buffer.
    ///
    /// @param  pBuffer         Pointer to the buffer.
    /// @param  pIHistConfig    Pointer to the configuration of the IHist Stats.
    /// @param  ppStats         Pointer to the stats buffer.
    ///
    /// @return CDKResultSuccess if successful.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual CDKResult ParseIHistStats(
        VOID*                         pBuffer,
        const ISPIHistStatsConfig*    pIHistConfig,
        ParsedIHistStatsOutput**      ppStats) = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetMaxStatsBufferSize
    ///
    /// @brief  This gets the Max size for the Parsed and Unparsed stats.
    ///
    /// @param  statsType   Type of stats that is needed.
    ///
    /// @return size
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual INT32 GetMaxStatsBufferSize(
        ISPStatsType statsType) = 0;

protected:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ~IStatsParser
    ///
    /// @brief  Destructor
    ///
    /// @return None
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~IStatsParser() {};

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// IStatsParser
    ///
    /// @brief  Constructor
    ///
    /// @return None
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    IStatsParser() = default;

private:
    IStatsParser(const IStatsParser&) = delete;             ///< Disallow the copy constructor.
    IStatsParser& operator=(const IStatsParser&) = delete;  ///< Disallow assignment operator
};

CAMX_NAMESPACE_END

#endif // CAMXISTATSPARSER_H
